const express = require('express');
const app = express();
const path = require('path');
const ejs = require('ejs');
const Joi = require('joi');
const session = require('express-session');
const multer = require('multer');

// console.log(__dirname);

// 配置session中间件
app.use(
  session({
    name: 'session_id',
    secret: 'AI_back_server',
    resave: false,
    saveUninitialized: true,
    cookie: {
      maxAge: 1000 * 60 * 60 * 24 * 30, //session有效时间1个月
    },
  })
);

// 配置静态文件
app.use(express.static('static'));
// 配置模板引擎
// 设置模板存储的位置
app.set('views', path.join(__dirname, 'views'));
// 设置模板存储位置
app.set('view engine', 'html');
// 使用ejs模板引擎解析
app.engine('html', ejs.renderFile);

// 配置路由post的 body
app.use(express.urlencoded({ extended: false }));
app.use(express.json());

// 注册路由中间件---一级路由
const adminRouter = require('./router/admin');
app.use('/admin', adminRouter);

// 用户端中间件
const indexRouter = require('./router/index');
app.use('/', indexRouter);

// 404页面
app.use((req, res, next) => {
  // res.send("404页面");
  res.render('error');
});

// 4.1 错误级别中间件
app.use(function (err, req, res, next) {
  // 4.1 Joi 参数校验失败
  if (err instanceof Joi.ValidationError) {
    return res.send({
      status: 0,
      message: err.message,
    });
  }
  // 文件上传效验
  if (err instanceof multer.MulterError) {
    return res.send({
      code:0,
      msg:err.message  
    })
  }
  // 4.2 未知错误
  res.send({
    status: 0,
    message: err.message,
  });
});

// 监听服务
app.listen('8080', () => {
  console.log('server running at http://127.0.0.1:8080');
});
